/*
 *
 顺序表增删改查输出
 *
 *
 * */
#include <stdio.h>
#include <stdlib.h>
#define SIZE 5

typedef struct Table{
    int* head;
    int length;
    int size;
}Table_t;

Table_t initTable(){
    Table_t t;
    t.head = (int*)malloc(SIZE*sizeof(int));
    if(!t.head){
        printf("malloc error");
        exit(0);
    }
    t.length = 0;
    t.size = SIZE;
    return t;
}

void DisplayTable(Table_t t){
    for(int i = 0; i < t.length; i++){
        printf("%d ",t.head[i]);
    }
    printf("\n");
}

Table_t addTable(Table_t t, int elem, int add){
    if(add > t.length+1 || add < 1){
        printf("插入位置有问题！");
        return t;
    }
    if(t.length == t.size){
        t.head = (int*) realloc(t.head, (t.size+1)*sizeof(int));
        if(!t.head){
            printf("relloc error!");
            exit(1);
        }
        t.size += 1;
    }
    for(int i = t.length-1; i >= add-1; i--){
        t.head[i+1] = t.head[i];
    }
    t.head[add-1] = elem;
    t.length++;

    return t;
}

Table_t delTable(Table_t t, int add){
    if(add > t.length || add < 1){
        printf("被删除的元素有误！");
        return t;
    }
    for(int i = add; i < t.length; i++){
        t.head[i-1] = t.head[i];
    }
    t.length++;
    return t;
}

int selectTable(Table_t t, int elem){
    for(int i = 0; i < t.length; i++){
        if(t.head[i] == elem){
            return i+1;
        }
    }
    return -1;
}

Table_t amendTable(Table_t t, int elem, int newElem){
    int add = selectTable(t, elem);
    t.head[add-1] = newElem;
}

int main(){
    Table_t t = initTable();
    for(int i = 0; i < 5; i++){
        t.head[i] = i;
        t.length++;
    }
    DisplayTable(t);

    printf("删除元素1:\n");
    t=delTable(t, 1);
    DisplayTable(t);

    printf("在第2的位置插入元素5:\n");
    t=addTable(t, 5, 2);
    DisplayTable(t);

    printf("查找元素3的位置:\n");
    int add=selectTable(t, 3);
    printf("%d\n",add);

    printf("将元素3改为6:\n");
    t=amendTable(t, 3, 6);
    DisplayTable(t);
    return 0;
}


